package com.szrt.pet.manager;

import com.szrt.pet.IPet;

/**
 * 1个宠物商店中可以放置多个宠物?
 * 1.1 宠物要放在宠物的数组中
 * 1.2 宠物放在宠物数组中的哪个位置   比如这个猫是放在数组的第0个位置还是放在第3位置。
 * 
 * 在宠物商店中对宠物进行管理
 * 0: 初始化1个宠物的数组
 * 1: 增加1只宠物  讲
 * 2: 删除1只宠物  自己做
 * 3: 修改宠物的年龄 自己做
 * 4: 根据名字查找宠物s 因为相同名字的宠物可能会有多个 讲
 *
 * 
 *
 */
public class PetShop {
	
	/**
	 * 宠物要放在宠物的数组中
	 */
	private IPet[] petArray;
	
	
	/**
	 * 1:思想：面向接口编程
	 * 		1.1  坑1：在形参中用接口来表示。不能是类来表示  也就是说add(IPet pet) 不能写add(Cat cat)
	 * 		1.2  坑2：在调用的时候不是用接口。而是用接口的实现类比如Cat Dog Rabbit....
	 * 2:优点：可以不用修改代码  一统江湖
	 * @param pet
	 * @return
	 */
	public boolean add(IPet pet){
		
		int len =petArray.length;
		
		//1 先判断笼子是否已经满了  
		if(index >= 10){
			//2 如果满了 直接返回false
			
			System.out.println("宠物添加失败...");
			return false;
		}else{
			System.out.println("宠物添加成功...");
			//3 如果没有满  就可以放进去  
			petArray[index]=pet;
			//问题：放在哪里? 放在index这个下标指示的地方。
			index = index+1;
			return true;
		}
	}
	
	
	/**
	 * 根据宠物的名称查找符合条件的宠物的数组
	 * @param name
	 * @return
	 */
	public IPet[] searchByName(String searchName){
		//0 准备1个计数器=0  ArrayList  Vector HashSet



		int counter =0;
		
		//1 在宠物的笼子中去找  petArray 遍历 拿到一只具体的宠物
		for(int index =0; index<10;index++){
			IPet pet =petArray[index];
			if(null != pet){
				//2 如果这个宠物的名字与包含要查找的名字  就说明找到了  就找到了1只  丢到新的笼子中去
				String petName = pet.getName();
				boolean flag =petName.contains(searchName);
				
				if(flag==true){
					//就说明找到了 让计数器加1
					counter = counter+1;
				}
			}
		}
		
		//对于我们这个例子来说  遍历完了之后 counter =2;
		
		//2 准备一个符合条件 数量等于counter的 宠物笼子  new出来的宠物笼子是1个空的笼子
		IPet[] newArray = new IPet[counter];
		
		int number =0;
		for(int index =0; index<10;index++){
			IPet pet =petArray[index];
			if(null != pet){
				//2 如果这个宠物的名字与包含要查找的名字  就说明找到了  就找到了1只  丢到新的笼子中去
				String petName = pet.getName();
				boolean flag =petName.contains(searchName);
				
				if(flag==true){
					//找到了1只  丢到新的笼子中去
					newArray[number]=pet;
					number= number+1;
				}
			}
		}
		
		//3 把宠物装到新的宠物笼子中去
		
		
		//3 问题：我到底要准备1个多大的笼子来放这些宠物? 准备1个计数器=0。应该找到几只符合条件的宠物就准备多大的笼子  比如如果有2中咖菲猫。只要宠物数组的长度为2
		
		return newArray;
	}
	
	public PetShop(){
		petArray = new IPet[10];
		System.out.println("1:创建好了1个宠物商店  2：并且在宠物商店中造好了10个笼子");
	}
	
	/**
	 * index的默认值0
	 * 宠物放在宠物数组中的哪个位置(index = 0 1 2 3 4 5 6 7 8 9 )
	 */
	private int index;
	
	
	
	public IPet[] getPetArray() {
		return petArray;
	}




	

}
